package com.xxgc.eow.client;

import com.dtflys.forest.annotation.Get;
import com.dtflys.forest.annotation.Query;
import com.xxgc.eow.client.response.WechatLoginResponse;
import com.xxgc.eow.client.response.WechatPhoneInfoResponse;
import com.xxgc.eow.client.response.WechatTokenResponse;
import org.springframework.stereotype.Component;

/**
 * @program: ExhibitionOfWorks
 * @description: 微信服务器 http接口调试
 * @author: Mr.Abel SJY
 * @Email thanksjava@qq.com
 * @create: 2023-05-08 09:57
 **/
@Component
public interface WechatClient {

    /**
     * 调用微信登录
     * https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
     * 调用 wx.login() 获取 临时登录凭证code ，并回传到开发者服务器。
     * 调用 auth.code2Session 接口，换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识UnionID（若当前小程序已绑定到微信开放平台帐号） 和 会话密钥 session_key。
     * @param appid 小程序 appId
     * @param secret 小程序 appSecret
     * @param js_code 登录时获取的 code，可通过wx.login获取
     * @param grant_type 授权类型，此处只需填写 authorization_code
     * @return WechatLoginResponse
     */
    @Get("https://api.weixin.qq.com/sns/jscode2session")
    WechatLoginResponse wechatLogin(@Query("appid") String appid,
                                    @Query("secret") String secret,
                                    @Query("js_code") String js_code,
                                    @Query("grant_type") String grant_type);


    /***
     * 获取接口调用凭据(用户获取手机号信息)
     * @param grant_type 填写 client_credential
     * @param appid 小程序唯一凭证，即 AppID，可在「微信公众平台 - 设置 - 开发设置」页中获得。（需要已经成为开发者，且帐号没有异常状态）
     * @param secret 小程序唯一凭证密钥，即 AppSecret，获取方式同 appid
     * @return WechatTokenResponse
     */
    @Get("https://api.weixin.qq.com/cgi-bin/token")
    WechatTokenResponse wechatTokenResponse(@Query("grant_type") String grant_type,
                                            @Query("appid") String appid,
                                            @Query("secret") String secret);


    /***
     * 此接口用于获取用户注册微信时的手机号
     * @param access_token 接口调用凭证，该参数为 URL 参数，非 Body 参数
     * @param code <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
     *             getPhoneNumber(e)
     *             e.detail.code获取
     * @return WechatPhoneInfoResponse
     */
    WechatPhoneInfoResponse wechatGetuserphonenumber(@Query("access_token") String access_token,
                                                     @Query("code") String code);

}
